//
//  ImageTool.m
//  ImageTool
//
//  Created by Wangzhenyu on 2017/12/7.
//  Copyright © 2017年 wzy. All rights reserved.
//
#import <QuartzCore/QuartzCore.h>
#import <Accelerate/Accelerate.h>
#import <ImageIO/ImageIO.h>

#import "ImageTool.h"

@implementation ImageTool
//在这里不进行动画的旋转 因为进行图片的动画旋转实质性执行的是承载imageView的view的动画旋转,这样图片其实并没有旋转，所以不建议用动画进行旋转。在这里采取的是对context进行旋转  具体的步骤是:
/**
 1.将图片转成context
 2.对context进行旋转
 3.将旋转后的context转换成image 然后再呈现数来
 
 */
+(UIImage*)rotateWithImage:(UIImage *)image degree:(CGFloat)degree{
    //1 将图片转成context
    
    CGFloat width = image.size.width * image.scale;
    CGFloat height = image.size.height * image.scale;
    //颜色通道对应RGBA/ ARGB 所以 每一行的字节数为 width* 4.f
    //图片每行显示的字节数
    size_t bytesPerRow = width * 4.f;
    //创建alpha通道 表示图片的透明情况
    CGImageAlphaInfo info = kCGImageAlphaPremultipliedFirst;
    
    //创建context
    //配置上下文参数
    CGContextRef context = CGBitmapContextCreate(nil, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault|info);
    
    if (!context) {
        return  nil;
    }
    
    //将图片渲染到上下文中
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), image.CGImage);
    
    uint8_t* data = (uint8_t*)CGBitmapContextGetData(context);
    vImage_Buffer src = {data,height,width,bytesPerRow};
    vImage_Buffer dest = {data,height,width,bytesPerRow};
    /***
  uint8_t *backColor: 背景颜色
  vImage_Flags flags: 填充颜色
    */
    Pixel_8888 bgColor ={0,0,0,0};
    //设置填充颜色为:填充
    vImage_Flags flags = kvImageBackgroundColorFill;
    
      //对context进行旋转
    vImageRotate_ARGB8888(&src, &dest, nil, degree * M_PI/180.f, bgColor, flags);
    
    //然后将context转成image
    
    CGImageRef imageRef =  CGBitmapContextCreateImage(context);
    
    UIImage * rotateImage =[UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation];
    
    return  rotateImage;
    
}


@end
